package top.kaoshanji.p1ch11b;

import top.kaoshanji.p1ch11a.BMWModel;
import top.kaoshanji.p1ch11a.BenzModel;

import java.util.ArrayList;
import java.util.List;

/**
 * 代码清单-p1ch11b-104页c：修改后的场景类
 * @author kaoshanji
 * ^_^
 * create time 2025/3/22 14:44
 */
public class Client {

    public static void main(String[] args) {

        /*
         * 客户告诉XX公司，我要这样一个模型，然后XX公司就告诉我老大
         * 说要这样一个模型，这样一个顺序，然后我就来制造
         */

        // 顺序1：存放 run 的顺序...
        // 这个是可以重用的...只要产品的顺序是相同
        List<String> sequence = new ArrayList<>();
        sequence.add("engineBoom"); // 客户要求， run 时候先发动引擎
        sequence.add("start"); // 启动起来
        sequence.add("stop"); // 开了一段就停下来


        // -----奔驰车：使用 顺序1-----
        // 要一个奔驰车
        BenzBuilder benzBuilder = new BenzBuilder();
        // 把顺序给这个 builder 类，制造出这样一个车出来
        benzBuilder.setSequence(sequence);

        // 制造一个奔驰车...
        // JDK5 支持返回类型协变..在子类重写父类方法时，子类方法的返回类型可以是父类方法定义的返回类型的子类
        BenzModel benz = benzBuilder.getCarModel();
        // 奔驰车跑一下看看
        benz.run();


        // -----宝马车：使用 顺序1-----
        BMWBuilder bmwBuilder = new BMWBuilder();
        bmwBuilder.setSequence(sequence);
        BMWModel bmw = bmwBuilder.getCarModel();
        bmw.run();


    }

}
